home *** CD-ROM | disk | FTP | other *** search
- {$R-,S-,I-,D-,F+,V-,B-,N-,L+,O+ }
-
- unit mycomman;
-
- interface
-
- uses crt,dos,
- gentypes,configrt,modem,statret,gensubs,subs1,windows,subs2,textret,
- mailret,userret,flags,mainr1,ansiedit,lineedit,
- mainr2,overret1;
-
- procedure nodelists;
- procedure mycommand;
- procedure localconfiguration;
- procedure showsystemstatus;
- procedure loozerlists;
- procedure listusers;
- procedure transfername;
- procedure editnews;
- procedure delerrlog;
- procedure feedback;
- procedure settime;
- procedure changepwd;
- procedure requestraise;
- procedure leechlist;
- procedure timebanks;
- procedure makeuser;
- procedure infoformhunt;
- procedure donations;
- procedure viewsyslog;
- procedure delsyslog;
- procedure showallforms;
- procedure mainhelp;
- procedure otherbbs;
- procedure readerrlog;
- procedure showad;
- procedure setlastcall;
- procedure removeallforms;
- procedure showscreens;
- Procedure showlastcallers;
- Procedure JumpConference;
- Procedure TopTen(eatshit:byte);
- Procedure DisplayNodeInfo;
- Procedure AddNews;
- Procedure RumorMenu;
- Procedure RandomRumor;
- Procedure Get_Infoform;
- Procedure UserCheck;
-
- implementation
-
- Procedure addnews;
- Var newline,r:Integer;
- nfile:File Of newsrec;
- ntmp,atmp:newsrec;
- numnews,cnt:Integer;
- m:message;
- t:text;
- Begin
- writehdr('Adding to the news');
- Writestr('Minimum Level to read news [1] :');
- If Input='' Then Input:='1';
- ntmp.level := Valu (input);
- Writestr('Maximum Level to read news [32767] :*');
- If Input='' Then Input:='32767';
- ntmp.maxlevel:=valu(Input);
- newline:=editor(m,false,true,'0','0');
- Ntmp.when:=now;ntmp.from:=unam;Ntmp.title:=m.title;
- ntmp.location:=newline;
- If newline<0 Then exit;
- r:=IOResult;
- Assign(nfile,'News');
- Reset(nfile);
- r:=IOResult;
- If r<>0
- Then
- Begin
- If r<>1 Then WriteLn('Error ',r,' opening news file; recreating.');
- Rewrite(nfile);
- Write(nfile,ntmp);
- numnews:=0
- End
- Else
- Begin
- numnews:=FileSize(nfile);
- For cnt:=numnews-1 Downto 0 Do
- Begin
- Seek(nfile,cnt);
- Read(nfile,atmp);
- Seek(nfile,cnt+1);
- Write(nfile,atmp)
- End;
- che;
- Seek(nfile,0);
- Write(nfile,Ntmp)
- End;
- WriteLn('News added. News items: ',numnews+1);
- writelog(2,1,'');
- Close(nfile);
- end;
-
- procedure mycommand;
- begin
- clearscr;
- if ansigraphics in urec.config then begin
- blowup(4,2,60,7);
- printxy(4,4,^R'[ '^P'ViSiON BBS Credits'^R' ]');
- printxy(5,4,'ViSiON BBS Software is brought to you by:');
- printxy(6,4,' Crimson Blade and The Elemental');
- printxy(8,4,' We can be contacted on the ViSiON Home Board:');
- printxy(9,4,' Countdown to Chaos - (619)868-2025');
- blowup(11,20,50,11);
- printxy(12,22,'Alot of thanx to the following:');
- printxy(13,22,' The Spectral Demon - Ideas/Menus/Doc''s');
- printxy(14,22,' Melkor - Ideas/Beta Testing');
- Printxy(15,22,' Xerxes - Beta Testing/Staff');
- Printxy(16,22,' Amplitude - ViSiON Spittle');
- printxy(17,22,' Sickler - Beta Testing');
- printxy(18,22,' The Byter - Inspiration and CHAT!');
- printxy(19,22,' THE SLAVELORD and Low Rider...');
- printxy(20,22,' Thanx for making this happen....');
- goxy (1,23);
- end else begin
- writeln(' -=-=-= ViSiON BBS Credits =-=-=-');
- writeln(^M'ViSiON BBS Software brought to you by:');
- writeln(' Crimson Blade & The Elemental');
- writeln(^M'Alot of Thanks to the following: (not in any particular ORDER!)');
- writeln(' The Spectral Demon - Ideas/Menus/Documentation');
- writeln(' Melkor - Ideas/Beta Testing');
- writeln(' Sickler - Beta Testing');
- writeln(' The Byter - Inspiration and Chat');
- writeln(' THE SLAVELORD - Ideas/Inspiration, and Thanx.'^M^M);
- writeln(' ViSiON can be seen/obtained on');
- writeln(' Countdown to Chaos - (619)868-2025 / ViSiON Home');
- end;
- end;
-
- procedure localconfiguration;
- var tp1,tp2:lstr;
- q,tp:integer;
- fn:file of configsettype;
-
- function sellitout(t2:lstr):lstr;
- begin
- writestr(^P'Enter the new '^R+t2+^P' for your BBS [Ret=No Change]:');
- sellitout:=input;
- end;
-
- begin
- repeat
- q:=menu('Local Configuration','CONFIGL','SPMTUANHFCVLQ');
- case q of
- 1:begin
- tp1:=sellitout('SHORTNAME');
- if (tp1<>'') then configset.shortnam:=tp1;
- writelog(21,1,configset.shortnam);
- end;
- 2:begin
- tp1:=sellitout('SYSTEM PASSWORD');
- if (TP1)<>'' then configset.systempasswor:=tp1;
- writelog(21,2,configset.systempasswor);
- end;
- 3:begin
- writestr(^P'Enter your new Matrix Type (0=none,1=standard,2=DOS,3=Custom) [Ret=No Change]:');
- if input<>'' then tp:=valu(input) else tp:=configset.matrixtyp;
- if (tp<0) or (tp>3) then begin
- writeln(^M'Thats an invalid range!');
- tp:=configset.matrixtyp;
- end;
- configset.matrixtyp:=tp;
- writelog(21,3,strr(configset.matrixtyp));
- end;
- 4:begin
- tp1:=sellitout('SYSOP PASSWORD');
- if (tp1<>'') then configset.sysop:=tp1;
- writelog(21,4,configset.sysop);
- end;
- 5:Begin
- tp1:=sellitout('TIME REFUND');
- if (tp1<>'') then tp:=valu(tp1) else tp:=configset.timepercentbac;
- configset.timepercentbac:=tp;
- writelog(21,5,strr(tp));
- end;
- 6:Begin
- writestr(^P'Allow new users ? *');
- if yes then configset.privat:=false else configset.privat:=true;
- if configset.privat then writelog(21,6,'No') else writelog(21,6,'Yes');
- end;
- 7:Begin
- tp1:=sellitout('NEW USER PASSWORD');
- if (tp1<>'') then configset.newuserpas:=tp1;
- if match(tp1,'N') then configset.newuserpas:='';
- writelog(21,7,configset.newuserpas);
- end;
- 8:Begin
- tp1:=sellitout('LOGIN HEADER');
- if (tp1<>'') then configset.loginheade:=tp1;
- writelog(21,8,configset.loginheade);
- end;
- 9:Begin
- writestr(^P'Allow feedback from the Matrix ? *');
- configset.feedmatr:=yes;
- if yes then writelog(21,9,'Yes') else writelog(21,9,'No');
- end;
- 10:begin
- writestr(^P'Allow paging from the matrix ? *');
- configset.chatmatr:=yes;
- if yes then writelog(21,10,'Yes') else writelog(21,10,'No');
- end;
- 11:Begin
- clearscr;
- writeln(^P'Status for '+^R+configset.longnam+^P+' registered to '+^R+registo);
- writeln;
- Tab(^P'Shortname',30);
- writeln(':'^R+configset.shortnam);
- tab(^P'Matrix type',30);
- writeln(':'^R+strr(configset.matrixtyp));
- tab(^P'Upload Time back',30);
- writeln(':'^R+strr(configset.timepercentbac));
- tab(^P'System Password',30);
- writeln(':'^R+configset.systempasswor);
- tab(^P'SysOp Password',30);
- writeln(':'^R+configset.sysop);
- tab(^P'Allow New Users',30);
- write(':'^R); if configset.privat then writeln('No') else writeln('Yes');
- tab(^P'New User Password',30);
- writeln(':'^R+configset.newuserpas);
- tab(^P'Login Header',30);
- writeln(':'^R+configset.loginheade);
- tab(^P'Allow Feedback from Matrix',30);
- write(':'^R); if configset.feedmatr then writeln('Yes') else writeln('No');
- tab(^P'Allow Chat from Matrix',30);
- write(':'^R); if configset.chatmatr then writeln('Yes') else writeln('No');
- tab(^P'Leech Week active',30);
- write(':'^R); if configset.leechwee then writeln('Yes') else writeln('No');
- end;
- 12:begin
- writestr(^P'Make leech week active ? *');
- configset.leechwee:=yes;
- if yes then writelog(21,11,'Yes') else writelog(21,11,'No');
- end;
- end until (q=13) or hungupon;
- writestr(^M^P'Save the new configuration ? *');
- if not yes then exit;
- assign(fn,configset.forumdi+'CONFIG.BBS');
- rewrite(fn);
- write(fn,configset);
- close(fn);
- writeln(^M^P'New configuration saved!');
- end;
-
-
- procedure showsystemstatus;
- var totalused,totalidle,totalup,totaldown,totalmins,callsday:real;
- cnt:integer;
-
- var tp1:string[3];
- begin
- totalused:=numminsused.total+elapsedtime(numminsused);
- totalidle:=numminsidle.total;
- totalup:=totalidle+numminsused.total;
- totalmins:=1440.0*(numdaysup-1.0)+timer;
- totaldown:=totalmins-totalup;
- callsday:=round(10*numcallers/numdaysup)/10;
- ClearScr;
- mens:=true;
- Nobreak:=false;
- DontStop:=True;
- AnsiColor(Urec.StatusBoxColor);
- FuckXy(2,21,^P'[ ViSiON version '^A+VersionNum+^P' System Status ]');
- AnsiColor(Urec.StatusBoxColor);
-
- BoxIt(4,1,40,8);
- AnsiColor(Urec.STatusBoxColor);
- FuckXy(4,3,^R'[ '^P'Main Status'^R' ]');
- FuckXy(5,3,^R'Board Name...: '^S+ConfigSet.LongNam);
- FuckXy(6,3,^R'SysOps Name..: '^S+RegisTo);
- FuckXy(7,3,^R'Total Users..: '^S+Strr(NumUsers));
- FuckXy(8,3,^R'Total Callers: '^S+StReal(NumCallers));
- FuckXy(9,3,^R'Calls Today..: '^S+Strr(CallsToday));
- FuckXy(10,3,^R'Calls per Day: '^S);
- WriteLn(CallsDay:2:1);
- AnsiColor(Urec.StatusBoxColor);
-
- BoxIt(4,42,30,6);
- FuckXy(5,44,^R'Files Uploaded: '^S+StrLong(Gnuf)+^M);
- FuckXy(6,44,^R'Total Messages: '^S+StrLong(Gnup)+^M);
- FuckXy(7,44,^R'Final PCR.....: '^S+Strr(Ratio(Gnup,Trunc(NumCallers)))+^M);
-
- AnsiColor(Urec.StatusBoxColor);
- BoxIt(10,42,30,7);
- FuckXy(10,44,^R'[ '^P'Modem Status'^R' ]');
- FuckXy(11,44,^R'Default Baud: '^S+Strlong(BaudRate));
- FuckXy(12,44,^R'Comm Port...: '^S+Strr(ConfigSet.UseCo));
- FuckXy(13,44,^R'Buffer Size.: '^S'512 bytes');
- FuckXy(14,44,^R'Bytes Sent..: '^S+strr(totalsent));
- FuckXy(15,44,^R'Bytes Recv..: '^S+strr(totalrece));
- PrintXy(20,1,'');
- end;
-
- procedure tabul (n:anystr; np:integer);
- var cnt:integer;
- begin
- write (n);
- ColorFB (1,0);
- for cnt:=length(n) to np-1 do write ('.');
- ColorFB (9,0);
- end;
-
- procedure listusers;
- var cnt,u1,u2:integer;
- u,uu : UserRec;
- areacode:anystr;
- begin
- writehdr ('Listing Users');
- parserange (numusers,u1,u2);
- if u1=0 then exit;
- ClearScr; ANSiCOLOR(15);
- writeln ('▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄');ANSiCOLOR(7);
- write ('█'); ColorFB(1,7);
- Write (' Alias/User Handle Main Level User Note Area Code ');
- ANSiCOLOR(7); WriteLn('█'); ANSicolor(8);
- writeln ('▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀');
- if break then exit;
- for cnt:=u1 to u2 do begin
- ColorFB (9,0);
- seek (ufile,cnt);
- read (ufile,uu);
- che;
- if length(uu.handle)>0 then begin
- if break then exit;
- tabul (uu.handle,32);
- if break then exit;
- if uu.level>=100 then begin
- ColorFB (12,0);
- tabul ('SysOp',9);
- ColorFB (9,0);
- end else
- if (uu.level>=90) and (uu.level<=99) then begin
- ColorFB (4,0);
- tabul ('CoSysOp',9);
- ColorFB (9,0);
- end else
- if (uu.level<=1) then begin
- ColorFB (4,0);
- tabul ('NEW',9);
- ColorFB (9,0);
- end else
- if (uu.level>ulvl) then begin
- ColorFB (7,0);
- tabul ('PRIV',9);
- ColorFB (9,0);
- end else begin
- Colorfb(13,0);
- tabul (strr(uu.level),9);
- end;
- if break then exit;
- Colorfb(3,0);
- tabul (uu.usernote,29);
- if break then exit;
- with uu do begin
- Colorfb(14,0);
- areacode:=uu.phonenum[1]+uu.phonenum[2]+uu.phonenum[3];
- tabul ('['+areacode+']',5);
- ColorFB (9,0);
- end;
- if break then exit;
- writeln;
- end
- end;
- end;
-
- procedure transfername;
- var un,nlvl,ntime,tmp:integer;
- u:userrec;
- begin
- if ulvl<configset.sysopleve then writeln(^M'You can''t do this without SysOp Access!');
- if ulvl>configset.sysopleve-1 then begin
- if tempsysop then begin
- writestr ('Disabling temporary sysop powers...');
- ulvl:=regularlevel;
- tempsysop:=false
- end;
- writestr ('Transfer to user name:');
- if length(input)=0 then exit;
- un:=lookupuser(input);
- if unum=un then begin
- writestr ('You can''t transfer to yourself!');
- exit
- end;
- if un=0 then begin
- writestr ('No such user.');
- exit
- end;
- seek (ufile,un);
- read (ufile,u);
- if ulvl<configset.sysopleve then if not checkpassword(u) then begin
- writelog (1,5,u.handle);
- exit
- end;
- writelog (1,4,u.handle);
- updateuserstats (false);
- ntime:=0;
- if datepart(u.laston)<>datepart(now) then begin
- tmp:=ulvl;
- if tmp<1 then tmp:=1;
- if tmp>100 then tmp:=100;
- ntime:=configset.usertim[tmp]
- end;
- if u.timetoday<10
- then if issysop or (u.level>=configset.sysopleve)
- then
- begin
- writestr ('The user has '+strr(u.timetoday)+' min(s) left!');
- writestr ('New time left:');
- ntime:=valu(input)
- end
- else
- if u.timetoday>0
- then writeln ('Warning: You have ',u.timetoday,' minutes left!')
- else
- begin
- writestr ('Sorry, that user doesn''t have any time left!');
- exit
- end;
- unum:=un;
- readurec;
- if ntime<>0 then begin
- urec.timetoday:=ntime;
- writeurec
- end;
- end;
- end;
-
- Procedure editnews;
- Var nn,numnews:Integer;
- nf:File Of newsrec;
- News:newsrec;
- Procedure getnn(txt:mstr);
- Begin
- writestr(^S+'News number to '+^R+txt+^S+':');
- nn:=valu(Input);
- If (nn<1) Or (nn>numnews) Then nn:=0
- End;
-
- Procedure delnews;
- Var cnt:Integer;
- r:Integer;
- NTmp:newsrec;
- Begin
- If nn=0 Then getnn('delete');
- If nn<>0 Then Begin
- Seek(nf,nn-1);
- Read(nf,Ntmp);che;
- deletetext(Ntmp.Location);
- numnews:=FileSize(nf)-1;
- For cnt:=nn To numnews Do
- Begin
- Seek(nf,cnt);
- Read(nf,nTmp);
- Seek(nf,cnt-1);
- Write(nf,Ntmp)
- End;
- Seek(nf,numnews);
- Truncate(nf)
- End
- End;
-
- Procedure listnews;
- Var cnt:Integer;
- r,sector:Integer;
- q:buffer;
- l:anystr;
- k:Char;
- Ntmp:newsrec;
- Begin
- clearbreak;
- WriteLn (^S' News Min Max Title ' ) ;
- WriteLn (^S' Number Level Level' ) ;
- WriteLn ;
-
- For cnt:=1 To numnews Do Begin
- Seek(nf,cnt-1);
- Read(nf,ntmp);
- r:=ntmp.location;
- Seek(tfile,r);
- Read(tfile,q);
-
- Write( Cnt:5 , ' ' , ntmp.level:5,' ',ntmp.maxlevel:5, ' ');
- r:=1;
- k:=' ';
- l:='';
- Writeln (ntmp.title);
- If break Then exit
- End;
- End;
-
- Procedure viewnews;
- Var r:Integer;
- Ntmp:newsrec;
- Begin
- If nn=0 Then getnn('view');
- If nn<>0 Then Begin
- Seek(nf,nn-1);
- Read(nf,nTmp);che;
- r:=ntmp.location;
- WriteLn('News #',nn,' ''',ntmp.title,''' From :',ntmp.from);
- WriteLn('Date: ',Datestr(ntmp.when),' Level [',ntmp.level,'-',ntmp.maxlevel,']');
- WriteLn('__________________________');
- printtext(r);
- writestr(^P^M'Press [Return] to continue.*')
- End
- End;
-
-
- Procedure adddnews;
- Begin
- Close(nf);
- addnews;
- Assign(nf,'News');
- Reset(nf)
- End;
-
- Var q:Integer;
- Begin
- Assign(nf,'News');
- Reset(nf);
- If IOResult<>0 Then writestr('No news! Use [A] to add some!') Else Begin
- Repeat
- numnews:=FileSize(nf);
- Write(^B^M'News entries: ',numnews);
- q:=menu('News edit','NEWS','ADLVQE');
- nn:=valu(Copy(Input,2,255));
- If (nn<1) Or (nn>numnews) Then nn:=0;
- Case q Of
- 1:adddnews;
- 2:delnews;
- 3:listnews;
- 4:viewnews;
- End;
- If numnews=0 Then Begin
- Close(nf);
- Erase(nf);
- q:=5
- End
- Until (q=5) Or hungupon
- End;
- Close(nf)
- End;
-
-
-
- procedure delerrlog;
- var e:text;
- i:integer;
- begin
- writestr ('Delete error log: Confirm:');
- if not yes then exit;
- assign (e,'errlog');
- reset (e);
- i:=ioresult;
- if ioresult=1
- then writeln (^M'No error log!')
- else begin
- textclose (e);
- erase (e);
- writestr ('Error log deleted.');
- if ioresult>1
- then writeln ('I/O error ',i,' deleting error log!');
- writelog (2,2,'')
- end
- end;
-
- procedure feedback;
- var m:mailrec;
- me:message;
- begin
- writestr (^P'Leave '^R+configset.Sysopnam+^P' feedback? *');
- if not yes then exit;
- m.line:=editor(me,false,true,'0','0');
- if m.line<0 then exit;
- m.title:=me.title;
- m.sentby:=unam;
- m.anon:=false;
- m.when:=now;
- addfeedback (m);
- writestr ('Feedback sent.')
- end;
-
- procedure settime;
- var t:integer;
- n:longint;
- r:registers;
- d:datetime;
- ken:integer;
- begin
- ken:=timeleft;
- writestr ('Current time: '+timestr(now));
- writestr ('Current date: '+datestr(now));
- writestr ('Enter new time:');
- if length(input)<>0
- then begin
- t:=timeleft;
- unpacktime (timeval(input),d);
- r.ch:=d.hour;
- r.cl:=d.min;
- r.dh:=0;
- r.dl:=0;
- r.ah:=$2d;
- intr ($21,r);
- if r.al=$ff then writestr ('Invalid time!');
- settimeleft (t)
- end;
- writestr ('Enter new date:');
- if length(input)<>0
- then begin
- unpacktime (dateval(input),d);
- r.dl:=d.day;
- r.dh:=d.month;
- r.cx:=d.year;
- r.ah:=$2b;
- intr ($21,r);
- if r.al=$ff then writestr ('Invalid date!')
- end;
- settimeleft(ken);
- writelog (2,4,'')
- end;
-
- procedure changepwd;
- var t:sstr;
- begin
- writehdr ('Password Change');
- dots:=true;
- buflen:=15;
- write ('Enter new password: ');
- if getpassword
- then begin
- writeurec;
- writestr ('Password changed.');
- writelog (1,1,'')
- end else
- writestr ('No change.')
- end;
-
- procedure requestraise;
- var t:text;
- q:lstr;
- p,l1,l2:integer;
- s1,s2:sstr;
- me:message;
- m:mailrec;
- label nope,found;
- begin
- assign (t,configset.textfiledi+'RAISEREQ');
- reset (t);
- if ioresult<>0 then goto nope;
- printtexttopoint (t);
- while not eof(t) do begin
- readln (t,q);
- p:=pos('-',q);
- if p>0
- then
- begin
- s1:=copy(q,1,p-1);
- s2:=copy(q,p+1,255)
- end
- else
- begin
- s1:=copy(q,1,15);
- s2:=s1
- end;
- val (s1,l1,p);
- if p=0 then val (s2,l2,p);
- if p<>0 then begin
- textclose (t);
- error ('Invalid range in RAISEREQ: %1','',q);
- exit
- end;
- if (ulvl>=l1) and (ulvl<=l2) then goto found;
- skiptopoint (t)
- end;
- nope:
- error ('No text for level %1','',strr(ulvl));
- textclose (t);
- p:=ioresult;
- exit;
- found:
- printtexttopoint (t);
- textclose (t);
- if hungupon then exit;
- m.line:=editor (me,false,true,'0','0');
- if m.line<0 then exit;
- m.anon:=false;
- m.title:='Raise request; now lvl='+strr(ulvl);
- m.sentby:=unam;
- m.when:=now;
- addfeedback (m);
- end;
-
- procedure leechlist;
- var u:userrec;
- f,l:integer;
- x1,x2,x3,ud,udk:longint;
- y1,y2,y3:real;
- worsud,worsudk:longint;
- w1,w2:mstr;
- beenaborted:boolean;
- begin
- f:=1;
- l:=numusers;
- seek(ufile,f);
- clearscr;
- beenaborted:=false;
- writehdr(' Leech List ');
- writeln(^R'Name');
- writeln(^U'────────────────────────────');
- w1:='Yer Momma';
- w2:=w1;
- worsud:=10000;
- worsudk:=10000;
- write(^B);
- for f:=1 to l do begin
- read(ufile,u);
- if break then beenaborted:=true;
- x1:=u.uploads;
- x2:=u.downloads;
- if x1<1 then x1:=1;
- if x2<1 then x2:=1;
- y1:=int(x1);
- y2:=int(x2);
- y3:=y1/y2;
- y3:=y3*100;
- x3:=trunc(y3);
- ud:=x3;
- x1:=u.upkay;
- x2:=u.dnkay;
- if x1<1 then x1:=1;
- if x2<1 then x2:=1;
- y1:=int(x1);
- y2:=int(x2);
- y3:=y1/y2;
- y3:=y3*100;
- x3:=trunc(y3);
- udk:=x3;
- if not beenaborted then
- if ((configset.leechud>=ud) or (configset.leechk>=udk)) and (u.level<configset.exemptpc) then begin
- write(^B);
- writeln(u.handle);
- if udk<worsudk then begin
- worsudk:=udk;
- w1:=u.handle;
- end;
- if ud<worsud then begin
- worsud:=ud;
- w2:=u.handle;
- end;
- end;
- end;
- writeln(^M^P'The worst offenders are:');
- writeln(^R'For U/D Ratio it goes to ',w2,' with a ',worsud,'% ratio!');
- writeln(^R'For U/D K it goes to ',w1,' with a ',worsudk,'% ratio!');
- writeln(^M^P'If your handle is above here, you should do something to clear it up!');
- end;
-
-
- procedure timebanks;
- var tm,tm2,tm3,tmp:integer;
- ke:string[1];
- begin
- if not configset.usetimebank then begin
- clearscr;
- writeln(^R'Sorry, but the Time Bank is closed right now!');
- exit;
- end;
- if urec.level<configset.levelusetb then begin
- clearscr;
- writeln(^R'Sorry, you do not have enough access to use the time-bank!');
- exit;
- end;
- repeat
- clearscr;
- writehdr(' The Time Bank ');
- writeln(^M^R'You have ',timeleft,' min(s) left online today.');
- writeln(^M^R'You have ',urec.timebank,' min(s) in your bank account.');
- writestr(^M^P'[W]ithdraw, [D]eposit, [Q]uit :*');
- ke:=upstring(input);
- if match(ke,'D') then begin
- if (urec.timebank>=configset.totalallowed) then
- writeln('I''m sorry, but you already have the maximum allowed in your account!')
- else begin
- tm:=configset.totalallowed-urec.timebank;
- if tm>timeleft then tm:=timeleft;
- writestr(^P'You may deposit up to '+strr(tm)+' minutes. How much do you wish to deposit? *');
- tm2:=valu(input);
- if tm2<0 then writeln('That was invalid!') else
- if tm2>tm then writeln('Sorry, you have broken the maximum limit!') else
- if tm2>timeleft then writeln('Sorry, you don''t have that much time left!')
- else begin
- urec.timebank:=urec.timebank+tm2;
- settimeleft(timeleft-tm2);
- writeln(Tm2,' minutes have been deposited in your account!');
- end;
- end;
- end;
- if match(input,'W') then begin
- if urec.timebank<1 then writeln('I''m sorry, but you have no time in your account to withdraw!')
- else begin
- writestr(^M'You may withdraw up to '+strr(urec.timebank)+' minutes. How much to withdraw?*');
- tm:=valu(input);
- if tm<0 then writeln('Invalid choice!') else
- if tm>urec.timebank then writeln('Yes, that would be nice, but you don''t have that kind of time!')
- else begin
- urec.timebank:=urec.timebank-tm;
- settimeleft(timeleft+tm);
- writeln(^M,tm,' minutes have been withdrawn from your account!');
- end;
- end;
- end;
- delay(500);
- until match(ke,'Q') or hungupon;
- end;
-
-
-
-
- procedure rumormenu;
- var rfile:file of rumorrec;
- r,ar:rumorrec;
-
- function numrumors:integer;
- begin
- numrumors:=filesize(rfile)
- end;
-
- procedure seekrfile (n:integer);
- begin
- seek (rfile,n-1)
- end;
-
- procedure openrfile;
- var n:integer;
- begin
- n:=ioresult;
- assign (rfile,'Rumors.Dat');
- reset (rfile);
- if ioresult<>0 then begin
- close (rfile);
- n:=ioresult;
- rewrite (rfile)
- end
- end;
-
- procedure showit (n:integer);
- var rr:rumorrec;
- x:integer;
- p:byte;
- a,sex,horndogz,fuck:string;
- begin
- seekrfile (n);
- read (rfile,rr);
- if ulvl<rr.level then exit;
- writeln;
- x:=1;
- while x <= length(rr.rumor) do begin
- case rr.rumor[x] of
- '|':begin
- x:=x + 1;
- sex:=copy(rr.rumor,x,1);
- horndogz:=copy(rr.rumor,x+1,1);
- a:=(upcase(sex[1]))+(upcase(horndogz[1]));
- if x <= length(rr.rumor) then begin
- If
- a='01' then ansicolor(1) else If
- a='02' then ansicolor(2) else if
- a='03' then ansicolor(3) else if
- a='04' then ansicolor(4) else if
- a='05' then ansicolor(5) else if
- a='06' then ansicolor(6) else if
- a='07' then ansicolor(7) else if
- a='08' then ansicolor(8) else if
- a='09' then ansicolor(9) else if
- a='10' then ansicolor(10) else if
- a='11' then ansicolor(11) else if
- a='12' then ansicolor(12) else if
- a='13' then ansicolor(13) else if
- a='14' then ansicolor(14) else if
- a='15' then ansicolor(15);
- end;
- x:=x + 2;
- end else begin
- write (rr.rumor[x]);
- x:=x + 1;
- end
- end;
- end;
- ansireset;
- If urec.prompttype=1 then WriteLn(^M^M);
- If urec.prompttype=2 then WriteLn(^M^M);
- end;
-
- procedure listrumors;
- var cnt:integer;
- b:boolean;
- t,n1,n2:integer;
- begin
- writeln;
- ansireset;
- if numrumors<1 then begin
- writeln ('There are no Rumors!');
- exit;
- end;
- b:=true;
- seekrfile (1);
- writehdr ('Rumors List');
- parserange (numrumors,n1,n2);
- if n1=0 then exit;
- t:=n1-1;
- for cnt:=n1 to n2 do begin
- t:=t+1;
- seek (rfile,t-1);
- read (rfile,r);
- if b then begin
- writeln
- (^P'#'^S' Title '^U'Date '^R'Author');
- writeln(^S'────────────────────────────────────────────────────────────────────────'^M^R);
- b:=false
- end;
- ansicolor (urec.promptcolor);
- tab (strr(cnt),4);
- ansicolor (urec.statcolor);
- tab (r.title,30);
- ansicolor (urec.inputcolor);
- tab (datestr(r.when),10);
- ansicolor (urec.regularcolor);
- if r.author='...!@ANON#$...' then
- begin
- write ('[Anonymous]');
- if ulvl>=configset.anonymousleve then write (^R,' ('^S,r.author2,^R')');
- writeln;
- end
- else writeln (^S,r.author);
- ansireset;
- if break then exit;
- ansicolor (urec.regularcolor);
- end;
- if b then writestr ('There are no Rumors!')
- end;
-
- function getrnum (txt:mstr):integer;
- var n:integer;
- begin
- getrnum:=0;
- repeat
- writeln;
- writestr ('Rumor Number to '+txt+' [?/List]:');
- if length(input)=0 then exit;
- if upcase(input[1])='?'
- then listrumors
- else begin
- n:=valu(input);
- if (n<1) or (n>numrumors) then begin
- writestr (^M'Number out of range!');
- exit
- end;
- seekrfile (n);
- read (rfile,r);
- if (ulvl<r.level) and (not issysop) then exit;
- getrnum:=n;
- exit
- end
- until hungupon
- end;
-
- procedure showrumor (n:integer);
- var rr:rumorrec;
- begin
- seekrfile (n);
- read (rfile,rr);
- if ulvl<rr.level then exit;
- writeln;
- showit(n);
- ansireset;
- end;
-
- procedure addrumor;
- var x,b:boolean;
- y,t:text;
- cdir,cddir:lstr;
- n:integer;
- z:anystr;
- apecks:rumorrec;
-
- function matchtitle (f:sstr):integer;
- var cnt:integer;
- monark:rumorrec;
- begin
- for cnt:=1 to numrumors do begin
- seekrfile (cnt);
- read (rfile,monark);
- if match (monark.title,f) then begin
- matchtitle:=cnt;
- ansireset;
- exit
- end
- end;
- matchtitle:=0
- end;
-
- begin
- if ulvl<2 then begin
- reqlevel (2);
- exit
- end;
- if numrumors>=999 then begin
- writeln;
- writeln ('Sorry, there are too many rumors now!');
- writeln ('Ask your Sysop to delete some.');
- exit
- end;
- ansireset;
- writehdr('Add a Rumor');
- buflen:=30;
- writeln (^U' '^S'─────────────────────────────-'^U'');
- writestr('Title: &');
- apecks.title:=input;
- if length(input)=0 then exit;
- if matchtitle(apecks.title)>0 then begin
- writeln;
- writeln ('Sorry, that Rumor already exists! Try another Title!');
- exit
- end;
- apecks.level:=1;
- apecks.author:=unam;
- apecks.author2:=unam;
- writeln;
- if ulvl>=configset.anonymousleve then begin
- writestr ('Post Rumor Anonymous [y/n]? *');
- if yes then apecks.author:='...!@ANON#$...' else
- apecks.author:=unam;
- end;
- apecks.when:=now;
- ansireset;
- writeln;
- writestr ('Level required to read Rumor [CR/1]: *');
- if length(input)=0 then apecks.level:=1 else
- apecks.level:=valu(input);
- writeln;
- writeln ('Enter Rumor [CR to Abort] Use |01 - |15 For Color');
- buflen:=78;
- writeln (^U' '^S'──────────────────────────────────────────────────────────────────────────-'^U'');
- writestr('> &');
- if input='' then exit;
- b:=true;
- apecks.rumor:=input;
- seekrfile (numrumors+1);
- write (rfile,apecks);
- if b then writeln (^M'Rumor created!');
- if not b then begin
- exit
- end;
- end;
-
- procedure deleterumor;
- var cnt,n:integer;
- f:file;
- begin
- n:=getrnum ('Delete');
- if n=0 then exit;
- seekrfile (n);
- read (rfile,r);
- if not issysop then
- if not match(r.author2,unam) then
- begin
- writeln;
- writeln ('You didn''t post that!!');
- writeln;
- exit
- end;
- writeln;
- seekrfile(n);
- showit(n);
- writeln;
- writestr ('Delete this Rumor [y/n]? *');
- if not yes then exit;
- for cnt:=n+1 to numrumors do begin
- seekrfile (cnt);
- read (rfile,r);
- seekrfile (cnt-1);
- write (rfile,r);
- end;
- seekrfile (numrumors);
- truncate (rfile);
- writelog (1,8,r.title)
- end;
-
- const beenaborted:boolean=false;
-
- function aborted:boolean;
- begin
- if beenaborted then begin
- aborted:=true;
- exit
- end;
- aborted:=xpressed or hungupon;
- if xpressed then begin
- beenaborted:=true;
- writeln (^B'Newscan aborted!')
- end
- end;
-
- procedure rumorsnewscan;
- var first,cnt:integer;
- nd:boolean;
- re:rumorrec;
- begin
- writehdr ('Rumors Newscan');
- if numrumors<1 then exit;
- for cnt:=1 to numrumors do begin
- seekrfile (cnt);
- read (rfile,re);
- if (re.when>laston) and (ulvl>=re.level) then begin
- ansicolor (urec.inputcolor);
- tab (strr(cnt)+'.',4);
- ansicolor (urec.promptcolor);
- write (re.title);
- ansicolor (urec.regularcolor);
- write (' by ');
- ansicolor (urec.inputcolor);
- if re.author='...!@ANON#$...' then
- write ('<Anonymous>') else write (re.author2);
- writeln;
- showit(cnt)
- end;
- end;
- end;
-
- procedure searchfortext;
- var x:integer;
- mixmasterfag:boolean;
- s:anystr;
- rr:rumorrec;
- begin
- if numrumors<1 then begin
- writeln (^M'No Rumors Exist!'^M);
- exit;
- end;
- writehdr ('Search for Text in all Rumors');
- writeln ('Enter Text to search for:');
- writestr ('-> &');
- writeln;
- if length(input)=0 then exit;
- s:=input;
- s:=upstring(s);
- for x:=1 to numrumors do begin
- mixmasterfag:=false;
- seekrfile (x);
- read (rfile,rr);
- if pos(s,upstring(rr.title))>0 then mixmasterfag:=true;
- if pos(s,upstring(rr.rumor))>0 then mixmasterfag:=true;
- if pos(s,upstring(rr.author))>0 then mixmasterfag:=true;
- if ((ulvl>=configset.anonymousleve) and (pos(s,upstring(rr.author2))>0)) then mixmasterfag:=true;
- if (mixmasterfag=true) and (ulvl>=rr.level) then begin
- ansicolor (urec.inputcolor);
- tab (strr(x)+'.',4);
- ansicolor (urec.promptcolor);
- write (rr.title);
- ansicolor (urec.regularcolor);
- write (' by ');
- ansicolor (urec.inputcolor);
- if rr.author='...!@ANON#$...' then
- write ('<Anonymous>') else write (rr.author2);
- writeln;
- write (' "');
- ansicolor (urec.statcolor);
- write (rr.rumor);
- ansicolor (urec.regularcolor);
- writeln ('"');
- end;
- end;
- end;
-
- label later;
- var prompt:lstr;
- n,q,b:integer;
- k:char;
- mp:boolean;
- begin
- if not configset.userume then begin
- writeln;
- writeln ('Rumors are not in use!');
- writeln;
- exit;
- end;
- openrfile;
- mp:=moreprompts in urec.config;
- if mp then urec.config:=urec.config-[moreprompts];
- repeat
- q:=menu ('Rumors','RUMOR','LAD#EQNS');
- writeln;
- if q<0 then begin
- b:=-q;
- if (b<0) or (b>numrumors) then
- writeln (^M'Number out of range!') else
- showrumor (b);
- end else
- case q of
- 1:listrumors;
- 2:addrumor;
- 3:deleterumor;
- 7:rumorsnewscan;
- 8:searchfortext;
- end;
- until (q=6) or (hungupon);
- later:
- close (rfile);
- if mp then urec.config:=urec.config+[moreprompts];
- end;
-
- procedure randomrumor;
- var rfile:file of rumorrec;
-
- function numrumors:integer;
- begin
- numrumors:=filesize(rfile)
- end;
-
- procedure seekrfile (n:integer);
- begin
- seek (rfile,n-1)
- end;
-
- procedure openrfile;
- var n:integer;
- begin
- n:=ioresult;
- assign (rfile,'Rumors.Dat');
- reset (rfile);
- if ioresult<>0 then begin
- close (rfile);
- n:=ioresult;
- rewrite (rfile)
- end
- end;
-
- procedure showit (n:integer);
- var rr:rumorrec;
- x:integer;
- p:byte;
- a,sex,horndogz,fuck:string;
- begin
- seekrfile (n);
- read (rfile,rr);
- if ulvl<rr.level then exit;
- writeln;
- x:=1;
- while x <= length(rr.rumor) do begin
- case rr.rumor[x] of
- '|':begin
- x:=x + 1;
- sex:=copy(rr.rumor,x,1);
- horndogz:=copy(rr.rumor,x+1,1);
- a:=(upcase(sex[1]))+(upcase(horndogz[1]));
- if x <= length(rr.rumor) then begin
- If
- a='01' then ansicolor(1) else If
- a='02' then ansicolor(2) else if
- a='03' then ansicolor(3) else if
- a='04' then ansicolor(4) else if
- a='05' then ansicolor(5) else if
- a='06' then ansicolor(6) else if
- a='07' then ansicolor(7) else if
- a='08' then ansicolor(8) else if
- a='09' then ansicolor(9) else if
- a='10' then ansicolor(10) else if
- a='11' then ansicolor(11) else if
- a='12' then ansicolor(12) else if
- a='13' then ansicolor(13) else if
- a='14' then ansicolor(14) else if
- a='15' then ansicolor(15);
- end;
- x:=x + 2;
- end else begin
- write (rr.rumor[x]);
- x:=x + 1;
- end
- end;
- end;
- ansireset;
- If urec.prompttype=1 then WriteLn(^M^M);
- If urec.prompttype=2 then WriteLn(^M^M);
- end;
-
- var x:integer;
- begin
- if not configset.userume then exit;
- openrfile;
- if numrumors<1 then begin
- writeln;
- ansicolor (11);
- write ('"');
- ansicolor (12);
- write ('Press ''R'' to make a Rumor...');
- ansicolor (11);
- writeln ('"');
- ansireset;
- end else
- begin
- seekrfile (1);
- randomize;
- x:=random (numrumors+1);
- showit (x);
- end;
- close (rfile);
- ansireset;
- end;
-
-
- procedure loozerlists;
- var fn:text;
- Num:Integer;
- Loozers:Array[1..500] of Mstr;
- dummystr:mstr;
- Ch:Char;
-
- Procedure ShowLoozers;
- Var Cnt:Integer;
- Begin
- ClearScr;
- WriteHdr('Loozer Lists');
- For Cnt:=1 to Num Do
- WriteLn(^S'[',Cnt,'] '^R+Loozers[Cnt]);
- End;
-
- Procedure AddLoozers;
- Begin
- WriteStr(^M^R'Enter name of Loozer to Add:');
- if Input<>'' then Begin
- Inc(Num);
- Loozers[Num]:=Input;
- End;
- End;
-
- Procedure DeleteLoozer;
- Var Cnt:Integer;
- Begin
- WriteStr(^M^R'Enter the # of the Loozer to Delete:');
- If (Input='') or (valu(Input)<1) or (Valu(Input)>Num) then Exit;
- If Valu(Input)=Num then Else
- For Cnt:=Valu(Input) to Num-1 do Loozers[Cnt]:=Loozers[Cnt+1];
- Dec(Num);
- End;
-
- Procedure SaveLoozers;
- Var Cnt:Integer;
- Begin
- Assign(Fn,ConfigSet.TextFileDi+'BlackLst');
- ReWrite(Fn);
- For Cnt:=1 to Num Do WriteLn(Fn,Loozers[Cnt]);
- TextClose(Fn);
- End;
-
- Procedure ReadLoozers;
- Begin
- Assign(Fn,ConfigSet.TextFileDi+'BlackLst');
- Reset(Fn);
- Num:=0;
- While Not Eof(Fn) do
- Begin
- ReadLn(Fn,DummyStr);
- Inc(Num);
- Loozers[Num]:=DummyStr;
- End;
- TextClose(Fn);
- End;
-
- begin
- if not exist(configset.textfiledi+'Blacklst') then begin
- writestr(^M+'There is no loozer list, do you wish to create one now? *');
- if not yes then exit;
- assign(fn,configset.textfiledi+'Blacklst');
- rewrite(fn);
- textclose(fn);
- end;
- ReadLoozers;
- Repeat
- ShowLoozers;
- WriteStr(^M^R'[A]dd a loozer, [D]elete a Loozer, [Q]uit:');
- If Input='' then Input:='L';
- Ch:=UpCase(Input[1]);
- If Ch='A' then AddLoozers;
- If Ch='D' then DeleteLoozer;
- Until (Ch='Q') or HungUpOn;
- saveloozers;
- end;
-
- procedure nodelists;
- Var Node:NodeNetRec;
- FN:File of NodeNetRec;
- I,J,CNT:Integer;
- C:Char;
-
- Procedure ShowNode;
- Begin
- ClearScr;
- WriteLn(^R'Node #'^S,I);
- Tab(^R+'Node Password',30);
- WriteLn(':'^S,Node.Pass);
- Tab(^R+'Node Name',30);
- WriteLn(':'^S,Node.Name);
- Tab(^R+'Node Phone Number',30);
- WriteLn(':'^S,Node.Phone);
- Tab(^R+'Node Baud Rate',30);
- WriteLn(':'^S,Node.Baud);
- Tab(^R+'Node ID Number',30);
- WriteLn(':'^S,Node.Node);
- WriteStr(^M^P'Press '^R'[Return]'^P' to see networked Bases:');
- ClearScr;
- Cnt:=1;
- Repeat
- If Node.BaseSelection[Cnt] then WriteLn('Base ID #',Cnt,' is networked!');
- Inc(Cnt);
- Until (Cnt=256) or HungUpOn;
- WriteStr(^M^P'Press '^R'[Return]:');
- End;
-
- Procedure DisplayNodeInformation;
- Begin
- If FileSize(Fn)=0 then Exit;
- Seek(Fn,0);
- I:=0;
- While Not Eof(Fn) do
- Begin
- Inc(I);
- Read(Fn,Node);
- ShowNode;
- End;
- WriteStr(^M^P'Press '^R'[Return]:');
- End;
-
- Procedure InitializeThisStuff;
- Begin
- Assign(Fn,ConfigSet.ForumDi+'NodeList.BBS');
- If Exist(ConfigSet.ForumDi+'NodeList.BBS') then Reset(FN)
- Else
- ReWrite(Fn);
- End;
-
- Procedure AddNode;
- Begin
- ClearScr;
- WriteHdr('Add a node');
- FillChar(Node,SizeOf(Node),0);
- WriteStr('Enter the Node Password:');
- If input='' then Exit;
- Node.Pass:=Input;
- WriteStr('Enter the Node Name:');
- If Input='' then Exit;
- Node.Name:=Input;
- WriteLn(^M^S^G'Do NOT include any "-"''s or "("''s for the phone number!'^G^M);
- WriteStr('Enter the Node Phone Number:');
- If Input='' then Exit;
- Node.Phone:=Input;
- WriteStr('Enter the Node''s Baud Rate (ex: 38400) :');
- If Input='' then Exit;
- If Input='1200' then Node.baud:=1200;
- If input='2400' then Node.baud:=2400;
- If Input='4800' then Node.baud:=4800;
- if Input='9600' then Node.Baud:=9600;
- If Input='19200' then Node.Baud:=19200;
- If Input='38400' then Node.baud:=38400;
- WriteLn(^M^S'The node ID address is your NETWORK id. It will be something like');
- WriteLn(^S'1:100, or something along those lines. (NOTE: Hub ID is same as each Node)'^M);
- WriteStr('Enter Node ID Address:');
- If Input='' then Exit;
- Node.Node:=Input;
- ClearScr;
- WriteLn(^S'Now we are going to pick the Base ID''s to be networked. Each message base');
- WriteLn(^S'That is networked will have a UNIQUE Base ID. This ID tells ViSiON Which Bases');
- WriteLn(^S'to network. Enter each base ID, when you are done, enter a "0".'^M);
- Repeat
- WriteStr('Base ID:');
- I:=Valu(Input);
- If (I>0) and (I<256) then Node.BaseSelection[I]:=True
- Else
- If I<>0 then WriteLn(^M^S^G'Invalid Range! Valid Ranges are from 1-255!'^M);
- Until (I=0) or HungUpOn;
- Write(^M'Adding Node to List...');
- Seek(Fn,FileSize(Fn));
- Write(Fn,Node);
- WriteLn('Completed!');
- WriteStr(^M^R'Press '^R'[Return]:');
- End;
-
- Procedure DeleteNode;
- Begin
- ClearScr;
- WriteStr('Which Node to Delete [1-'+strr(FileSize(Fn))+']:');
- I:=Valu(Input);
- If (I<1) or (I>FileSize(Fn)) then Exit;
- Write(^M'Deleting Node...');
- Dec(i);
- Cnt:=I;
- While Cnt<FileSize(Fn)-1 Do
- Begin
- Seek(Fn,Cnt+1);
- Read(Fn,Node);
- Seek(Fn,Cnt);
- Write(Fn,Node);
- Inc(Cnt);
- End;
- Seek(Fn,FileSize(Fn)-1);
- Truncate(Fn);
- Close(Fn);
- Assign(Fn,ConfigSet.ForumDi+'NodeList.BBS');
- Reset(Fn);
- WriteLn('Deleted!');
- WriteStr(^M^R'Press '^P'[Return]:');
- End;
-
- Procedure EditNode;
- Var NodeNum:Integer;
-
- Procedure GetPhoneNum;
- Begin
- ClearScr;
- WriteStr('Enter the New Phone Number:');
- If Input<>'' then Node.Phone:=Input;
- End;
-
- Procedure GetBaud;
- Begin
- ClearScr;
- WriteStr('Enter the NEW baud rate for this board:');
- If Input='1200' then Node.Baud:=1200
- Else
- if Input='2400' then Node.baud:=2400
- Else
- If Input='4800' then Node.Baud:=4800
- Else
- If Input='9600' then Node.Baud:=9600
- Else
- If Input='19200' then Node.baud:=19200
- Else
- If Input='38400' then Node.Baud:=38400;
- End;
-
- Procedure GetName;
- Begin
- ClearScr;
- WriteStr('Enter the New Node Name:');
- If Input<>'' then Node.Name:=Input;
- End;
-
- Procedure NodePassword;
- Begin
- ClearScr;
- WriteStr('Enter the New Node Password:');
- If Input<>'' then Node.Pass:=Input;
- End;
-
- Procedure NodeIdNumber;
- Begin
- ClearScr;
- WriteStr('Enter the NEW Node ID Number:');
- If Input<>'' then Node.Node:=Input;
- End;
-
- Procedure NetBases;
- Begin
- ClearScr;
- WriteLn(^S'To change the status of a networked base, enter the BASE ID that you wish');
- WriteLn(^S'to change. I.e. if Base 1 was networked, and you wish to not carry it anymore');
- WriteLn(^S'then you would enter a "1". Enter a "0" when you are done.'^M);
- Repeat
- WriteStr('Base ID to Change:');
- I:=Valu(Input);
- If (I>0) and (I<256) then
- Begin
- Node.BaseSelection[I]:=Not Node.BaseSelection[I];
- If Node.BaseSelection[I] then Writeln('Base ID:',I,' WILL be networked.')
- Else
- WriteLn('Base ID:',i,' will NOT be networked.');
- End;
- Until (I=0) or HungUpOn;
- End;
-
- Begin
- ClearScr;
- WriteStr('Enter the Node to Edit [1-'+strr(FileSize(Fn))+']:');
- I:=Valu(Input);
- If (I<1) or (I>FileSize(Fn)) then Else
- Begin
- Seek(Fn,I-1);
- Read(Fn,Node);
- NodeNum:=I-1;
- Repeat
- ClearScr;
- WriteHdr('Node Editing');
- WriteLn(^P'P) Phone Number'^M^P'B) Baud Rate'^M^P'N) Node Name');
- WriteLn(^P'V) View Node'^M^P'W) Node Password'^M^P'I) Node ID Number');
- WriteLn(^P'S) Net bases'^M^P'Q) Quit Editing'^M);
- WriteStr('Choice:');
- If Input='' then Input:='Q';
- C:=UpCase(Input[1]);
- Case C Of
- 'P':GetPhoneNum;
- 'B':GetBaud;
- 'N':GetName;
- 'V':ShowNode;
- 'W':NodePassword;
- 'I':NodeIDNumber;
- 'S':NetBases;
- End;
- Until (C='Q') or HungUpOn;
- Seek(Fn,NodeNum);
- Write(Fn,Node);
- End;
- C:='U';
- End;
-
- Begin
- InitializeThisStuff;
- Repeat
- ClearScr;
- WriteHdr('Node List Maintenance');
- WriteLn(^P'S) Show All Nodes');
- WriteLn(^P'E) Edit a node');
- WriteLn(^P'D) Delete a Node');
- WriteLn(^P'A) Add a node');
- WriteLn(^P'Q) Quit Node Editor'^M);
- WriteStr('Choice:');
- If Input='' then Input:='Q';
- C:=UpCase(Input[1]);
- Case C of
- 'S':DisplayNodeInformation;
- 'E':EditNode;
- 'D':DeleteNode;
- 'A':AddNode;
- End;
- Until (C='Q') or HungUpOn;
- Close(Fn);
- End;
-
-
- procedure makeuser;
- var u:userrec;
- un,ln,txx:integer;
- begin
- writehdr ('Add a user');
- writestr ('Name:');
- if length(input)=0 then exit;
- if lookupuser(input)<>0 then begin
- writestr ('Sorry! Already exists!');
- exit
- end;
- u.handle:=input;
- u.realname:='';
- writestr ('Password:');
- u.password:=input;
- writestr ('Level:');
- if length(input)=0 then exit;
- u.level:=valu(input);
- for txx:=1 to 32 do u.confset[txx]:=0;
- u.phonenum:='8005551212';
- u.usernote:='New User';
- un:=adduser(u);
- if un=-1 then begin
- writestr ('Sorry, no room for new users!');
- exit
- end;
- ln:=u.level;
- if ln<1 then ln:=1;
- if ln>100 then ln:=100;
- u.timetoday:=configset.usertim[ln];
- writeufile (u,un);
- writestr ('User added as #'+strr(un)+'.');
- writelog (2,8,u.handle)
- end;
-
- procedure infoformhunt;
- var tp:mstr;
- info:integer;
- begin
- writestr ('User to search for [CR=all users]:');
- writeln (^M);
- tp:=input;
- writestr('Infoform # view [1-5]: [1]:*');
- if input='' then input:='1';
- info:=valu(input);
- if (info>0) and (info<6) then
- showinfoforms (tp,info)
- end;
-
- procedure donations;
- var fn:lstr;
- begin
- fn:=configset.textfiledi+'Donation';
- if exist (fn)
- then printfile (fn)
- else begin
- writestr ('I''m sorry, no information is currently available.');
- if issysop
- then writestr (
- 'Sysop: To create donation information text, make a file called '+fn)
- end
- end;
-
- procedure viewsyslog;
- var n:integer;
- l:logrec;
-
- function lookupsyslogdat (m,s:integer):integer;
- var cnt:integer;
- begin
- for cnt:=1 to numsyslogdat do with syslogdat[cnt] do
- if (menu=m) and (subcommand=s) then begin
- lookupsyslogdat:=cnt;
- exit
- end;
- lookupsyslogdat:=0
- end;
-
- function firstentry:boolean;
- begin
- firstentry:=(l.menu=0) and (l.subcommand in [1..2])
- end;
-
- procedure backup;
- begin
- while n<>0 do begin
- n:=n-1;
- seek (logfile,n);
- read (logfile,l);
- if firstentry then exit
- end;
- n:=-1
- end;
-
- procedure showentry (includedate:boolean);
- var q:String;
- p:integer;
- begin
- q:=^S+'[ '+^R+syslogdat[lookupsyslogdat(l.menu,l.subcommand)].text;
- p:=pos('%',q);
- if p<>0 then q:=copy(q,1,p-1)+l.param+copy(q,p+1,255);
- repeat
- q:=q+'.';
- until length(q)>48;
- q:=q+^S+' ] '+^P+'[ '+^A;
- if includedate then q:=q+datestr(l.when)+' at '+TimeStr(L.When)+^P' ]'
- Else
- q:=q+timestr(l.when)+^P+' ]';
- writeln (q)
- end;
-
- var b:boolean;
- begin
- writehdr ('View system log');
- writeln ('Press space to advance to the previous caller, X to abort.');
- writeln;
- writelog (2,6,'');
- n:=filesize(logfile);
- repeat
- clearbreak;
- writeln (^M);
- backup;
- if n=-1 then exit;
- seek (logfile,n);
- read (logfile,l);
- showentry (true);
- b:=false;
- while not (eof(logfile) or break or xpressed or b) do begin
- read (logfile,l);
- b:=firstentry;
- if not b then showentry (false);
- end
- until xpressed
- end;
-
- procedure delsyslog;
- begin
- writestr ('Delete system log: Confirm:');
- if not yes then exit;
- if (not local) then begin
- writeln(^M'You may only delete the System log locally!'^M);
- exit;
- end;
- close (logfile);
- rewrite (logfile);
- writeln (^M'System log deleted.');
- writelog (2,7,unam)
- end;
-
- procedure showallforms;
- var info:integer;
- begin
- writestr('Which infoform to view [1-5]: [1]:*');
- if input='' then input:='1';
- info:=valu(input);
- if (info>0) and (info<6) then
- showinfoforms ('',info)
- end;
-
- procedure mainhelp;
- begin
- help ('Mainmenu.hlp')
- end;
-
- procedure otherbbs;
- var blfile:file of bbsrec;
- card,ugbot,p:lstr;
- b:bbsrec;
-
- function numbbses:integer;
- begin
- numbbses:=filesize(blfile)
- end;
-
- procedure seekblfile (n:integer);
- begin
- seek (blfile,n-1);
- end;
-
- function numbbs:integer;
- begin
- numbbs:=filesize (blfile);
- end;
-
- procedure getstring (t:lstr; var m; buf:integer);
- var q:lstr absolute m;
- mm:lstr;
- begin
- writeln (^R'Old '^V,t,^R': '^S,q,^R);
- buflen:=buf;
- writestr ('Enter new '+^V+t+^P+' [CR/no change]:');
- mm:=input;
- if length(mm)<>0 then q:=mm;
- writeln
- end;
-
- procedure listbbs;
- var cnt,b1,b2:integer;
- showedz:boolean;
- begin
- writehdr ('BBS List');
- reset (blfile);
- if ioresult<>0 then begin
- writeln ('There are no bbs! you may add your own!');
- exit;
- end
- else begin
- parserange (numbbs,b1,b2);
- {writestr ('Display complete Description [y/n]? *');
- writeln;
- howedz:=true;
- if upcase(input[1])='N' then showedz:=false;}
- cls;
- writehdr ('ViSiON BBS Listing');
- colorfb(3,0);
- writeln (^R'╒═════════╤══════════════╤═════════╤════════════════════════════════════════╕');
- writeln (^R'│'^A'Software '^R'│'^A' Phone Number '^R'│'^A' Max BPS '^R'│ '^A+
- 'Board Name '^R'│');
- writeln (^R'╞═════════╪══════════════╪═════════╪════════════════════════════════════════╡');
- if b1>0 then
- for cnt := b1 to b2 do
- begin
- if xpressed then exit;
- seekblfile(cnt);
- read(blfile,b);
- tab (^R'│ '^S+b.ware,12);
- tab (^R'│ '^U+b.phone,17);
- tab (^R'│ '^P+b.baud,12);
- tab (^R'│ '^U+b.name,43);
- writeln (^R'│');
-
- If break Then begin
- writeln (^R'╘═════════╧══════════════╧═════════╧════════════════════════════════════════╛');
-
- exit
- end;
- End;
- writeln (^R'╘═════════╧══════════════╧═════════╧════════════════════════════════════════╛');
-
- End;
-
-
- end;
-
- Procedure SD;
- Begin
- ANSiColor(8);
- WriteLn('█');
- End;
-
- procedure addbbs;
- begin
- ClearScr;
- WriteLn(^R'╒════════════════════════════════'^P'['^U'Add a BBS Entry'^P']'^R'═══╕');
- Write(^R'│ '^S'BBS Name '^R'│');SD;
- write(^R'│ '^P': '^R'│');SD;
- Write(^R'│ '^S'BBS Number '^R'│');sd;
- Write(^R'│ '^P': '^R'│');sd;
- write(^R'│ '^S'Highest Baud Rate '^R'│');sd;
- Write(^R'│ '^P': '^R'│');sd;
- Write(^R'│ '^S'Software ('^U'ViSiON'^S')! '^R'│');sd;
- Write(^R'│ '^P': '^R'│');sd;
- Write(^R'╘════════════════════════════════════════════════════╛');sd;
- WriteLn(' ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀');
- GoXy(6,3);
- buflen:=40;
- writestr ('*');
- b.name:=input;
- GoXy(6,5);
- buflen:=12;
- writestr ('*');
- b.phone:=input;
- GoXy(6,7);
- buflen:=5;
- writestr ('*');
- b.baud:=input;
- GoXy(6,9);
- buflen:=8;
- writestr ('*');
- b.ware:=input;
- writeln;
- b.leftby:=unam;
- if (length(b.phone)>0) and (length(b.name)>0) and (length(b.baud)>0)
- and (length(b.ware)>0) then begin
- if not exist ('BBSLIST.DAT') then rewrite (blfile) ;
- seekblfile (numbbses+1);
- write (blfile,b);
- writeln (^M^S'Entry Added!'^R^M);
- end else
- writeln (^M^S'Bad Entry!'^R^M);
- end;
-
- procedure changebbs;
- var q,spock:integer;
- doodzdomain:char;
-
- procedure showbbs (b:bbsrec);
- begin
- writeln (^M^R'[1]... Name: '^S,b.name,
- ^M^R'[2]... Number: '^S,b.phone,
- ^M^R'[3]... Max Baud: '^S,b.baud,
- ^M^R'[4]... Software: '^S,b.ware,
- ^M^R'[Q]... Quit');
- end;
-
- begin
- writehdr ('Change an Entry');
- writestr (^M^R'Entry to Change ['^S'?'^R']: &');
- if input[1]='?' then listbbs;
- spock:=valu(input);
- if spock<1 then exit;
- if spock>numbbs then exit;
- seekblfile (spock);
- read (blfile,b);
- if not (match (b.leftby,unam)) then begin
- writeln (^M'You didn''t make the entry!'^M);
- exit;
- end;
- repeat
- showbbs (b);
- writestr ('Edit Command: *');
- doodzdomain:=upcase(input[1]);
- case doodzdomain of
- '1':getstring ('Name',b.name,48);
- '2':getstring ('Number',b.phone,12);
- '3':getstring ('Max Baud',b.baud,4);
- '4':getstring ('Software',b.ware,4);
- 'Q':;
- end;
- until doodzdomain='Q';
- seek (blfile,spock-1);
- write (blfile,b);
- close (blfile);
- end;
-
- Procedure Deletebbs;
- Var bud,cnt,n:Integer;
- f:File;
- KKOOL:bbsrec;
- Begin
- Writehdr ('Delete a BBS');
- Writestr ('BBS record # to delete? :');
- if input='' then exit;
- bud:=valu(input);
- if bud>numbbs then exit;
- n:=bud;
- If n=0 Then exit;
- seek (blfile,n-1);
- read (blfile,kkool);
-
- writestr('Delete '+^S+kkool.name+^P+'? *');
- if ((match (unam,kkool.leftby))=false) and (issysop=false) then exit;
-
- If Not yes Then exit;
- For cnt:=n+1 To numbbs Do Begin
- seekblfile(cnt);
- Read(blfile,kkool);
- seekblfile(cnt-1);
- Write(blfile,kkool)
- End;
- seekblfile(numbbs);
- Truncate(blfile);
- writestr(^M'Deleted.');
- End;
-
-
- procedure bbslistsysop;
- begin
- writeln;
- repeat
- ugbot:=' ';
- writeln (^R'('^S'D'^R')elete an Entry');
- writeln (^R'('^S'C'^R')hange an Entry');
- writeln (^R'('^S'Q'^R')uit'^M);
- writestr ('[BBS List Sysop Command]:');
- ugbot:=upstring(input);
- case ugbot[1] of
- 'D':deletebbs;
- 'C':changebbs;
- 'S':begin
- end;
- 'T':begin
- end;
- 'Q':;
- end;
- until (ugbot[1]='Q');
- end;
-
- label exit;
- var q:integer;
- begin
- assign (blfile,'BBSLIST.DAT');
- WriteHdr('BBS Listings...');
- repeat
- q:=menu ('BBS List','BBSLIST','LADC%QI');
- writeln;
- case q of
- 1:listbbs;
- 2:addbbs;
- 3:deletebbs;
- 4:changebbs;
- 5:bbslistsysop;
- 6:goto exit;
- end;
- until (hungupon) or (q=6);
- exit:
- close (blfile);
- end;
-
- procedure readerrlog;
- begin
- if exist (configset.forumdi+'Errlog')
- then printfile (configset.forumdi+'Errlog.')
- else writestr ('No error file!')
- end;
-
- procedure showad;
- var fn:lstr;
- begin
- fn:=configset.textfiledi+'VISION.AD';
- if exist (fn) then printfile (fn)
- end;
-
- procedure setlastcall;
-
- function digit (k:char):boolean;
- begin
- digit:=ord(k) in [48..57]
- end;
-
- function validtime (inp:sstr):boolean;
- var c,s,l:integer;
- d1,d2,d3,d4:char;
- ap,m:char;
- begin
- validtime:=false;
- l:=length(inp);
- if (l<7) or (l>8) then exit;
- c:=pos(':',inp);
- if c<>l-5 then exit;
- s:=pos(' ',inp);
- if s<>l-2 then exit;
- d2:=inp[c-1];
- if l=7
- then d1:='0'
- else d1:=inp[1];
- d3:=inp[c+1];
- d4:=inp[c+2];
- ap:=upcase(inp[s+1]);
- m:=upcase(inp[s+2]);
- if d1='1' then if d2>'2' then d2:='!';
- if (d1>='0') and (d1<='1') and digit(d2) and (d3>='0') and (d3<='5')
- and digit(d4) and ((ap='A') or (ap='P')) and (m='M')
- then validtime:=true
- end;
-
- function validdate (inp:sstr):boolean;
- var k,l:char;
-
- function gchar:char;
- begin
- if length(inp)=0 then begin
- gchar:='?';
- exit
- end;
- gchar:=inp[1];
- delete (inp,1,1)
- end;
-
- begin
- validdate:=false;
- k:=gchar;
- l:=gchar;
- if not digit(k) then exit;
- if l='/'
- then if k='0'
- then exit
- else
- else begin
- if k>'1' then exit;
- if not digit(l) then exit;
- if (l>'2') and (k='1') then exit;
- l:=gchar;
- if l<>'/' then exit
- end;
- k:=gchar;
- l:=gchar;
- if l='/'
- then if k='0'
- then exit
- else
- else begin
- if k>'3' then exit;
- if not digit(l) then exit;
- if (k='3') and (l>'1') then exit;
- l:=gchar;
- if l<>'/' then exit
- end;
- if digit(gchar) and digit(gchar) then validdate:=true
- end;
-
- begin
- writeln (^M'Your last call was: '^S,datestr(laston),' at ',timestr(laston));
- writestr (^M'Enter new date (mm/dd/yy):');
- if length(input)>0
- then if validdate (input)
- then laston:=dateval(input)+timepart(laston)
- else writestr ('Invalid date!');
- writestr (^M'Enter new time (hh:mm am/pm):');
- if length(input)>0
- then if validtime(input)
- then laston:=timeval(input)+datepart(laston)
- else writestr ('Invalid time!')
- end;
-
- procedure removeallforms;
- var cnt,ndel:integer;
- u:userrec;
- begin
- writestr ('Erase ALL info-forms: Are you sure? *');
- if not yes then exit;
- writeurec;
- writestr (^M'Erasing... please stand by...');
- ndel:=0;
- for cnt:=1 to numusers do begin
- if (cnt mod 10)=0 then write (cnt,', ');
- seek (ufile,cnt);
- read (ufile,u);
- if u.infoform>=0 then
- deletetext (u.infoform);
- u.infoform:=-1;
- if u.infoform2>=0 then deletetext(u.infoform2);
- u.infoform2:=-1;
- if u.infoform3>0 then deletetext(u.infoform3);
- u.infoform3:=-1;
- if u.infoform4>0 then deletetext(u.infoform4);
- u.infoform4:=-1;
- if u.infoform5>0 then deletetext(u.infoform5);
- u.infoform5:=-1;
- seek (ufile,cnt);
- write (ufile,u);
- end;
- writeln ('done.');
- writestr (^M'All '+strr(numusers)+' forms erased.');
- readurec
- end;
-
- procedure showscreens;
- var i:integer;
- begin
- repeat
- clearscr;
- writehdr('The Ansi Gallery');
- writeln(^M^P'[A] - '^A'Show ASCII Welcome Screen');
- writeln(^P'[1-',configset.numwelcome,'] - '^A'Show Ansi Welcome Screen #xx');
- writeln(^P'[Q] - '^A'Exit this section');
- writestr(^M^R'Selection:');
- if input='' then input:='Q';
- if match(input,'A') then printfile(configset.textfiledi+'Welcome.Asc') else
- if not match(input,'Q') then begin i:=valu(input);
- if (i>0) and (i<=configset.numwelcome) then printfile(configset.textfiledi+'Welcome.'+strr(i))
- else writeln(^M^S'Invalid Screen!');
- end;
- if not match(input,'Q') then begin
- buflen:=0;
- writestr(^M^R'Press [Return]*');
- end;
- until match(input,'Q') or hungupon;
- end;
-
- Procedure showlastcallers;
- Var qf:File Of lastrec;
- cnt:Integer;
- l:lastrec;
- Begin
- If ConfigSet.LastLeve>Ulvl then Exit;
- Assign(qf,'Callers');
- Reset(qf);
- If IOResult=0 Then Begin
- ClearScr;
- writehdr('Recent Caller List');
- writehdr(' User''s Name Date Time Speed ');
- For cnt:=0 To FileSize(qf)-1 Do begin
- Read(qf,l);
- Write(' ');
- ANSiCOLOR(11);
- Tabul(l.name,39);
- ansicolor(3);
- Tabul(datestr(l.when),12);
- ansicolor(3);
- Tabul(timestr(l.when),12);
- ansicolor(9);
- Tabul(strr(l.lastbps)+' Bps',12);
- WriteLn;
- if Break then Begin
- Close(qf);
- Exit;
- End;
- End;
- Close(qf)
- End;
- End;
-
- Procedure JumpConference;
- Var I:Integer;
- Begin
- If configset.numconfs<2 then Begin
- exit;
- end;
- Urec.Conf[1]:=True;
- WriteHdr('Conference Selections');
- WriteLn(^P'['^R'1'^P'] '^S+ConfigSet.Conf1);
- If (ConfigSet.NumConfs>1) and Urec.Conf[2] then
- WriteLn(^P'['^R'2'^P'] '^S+ConfigSet.Conf2);
- If (ConfigSet.NumConfs>2) and Urec.Conf[3] then
- WriteLn(^P'['^R'3'^P'] '^S+ConfigSet.Conf3);
- If (ConfigSet.NumConfs>3) and Urec.Conf[4] then
- WriteLn(^P'['^R'4'^P'] '^S+ConfigSet.Conf4);
- If (ConfigSet.NumConfs>4) and Urec.Conf[5] then
- WriteLn(^P'['^R'5'^P'] '^S+ConfigSet.Conf5);
- WriteStr(^M^R'Conference '^P'['^A'1'^P']'^R':');
- If Input='' then Input:='1';
- I:=Valu(Input);
- If (I<1) or (I>ConfigSet.NumConfs) or not Urec.Conf[I] then
- WriteLn(^M^G'Invalid Choice!')
- Else
- Begin
- CurrentConference:=I;
- Case I of
- 1:WriteLn(^M^R'Conference: '^P'['^A+ConfigSet.Conf1+' #'+strr(currentconference)+^P']'^R' Joined...');
- 2:WriteLn(^M^R'Conference: '^P'['^A+ConfigSet.Conf2+' #'+strr(currentconference)+^P']'^R' Joined...');
- 3:WriteLn(^M^R'Conference: '^P'['^A+ConfigSet.Conf3+' #'+strr(currentconference)+^P']'^R' Joined...');
- 4:WriteLn(^M^R'Conference: '^P'['^A+ConfigSet.Conf4+' #'+strr(currentconference)+^P']'^R' Joined...');
- 5:WriteLn(^M^R'Conference: '^P'['^A+ConfigSet.Conf5+' #'+strr(currentconference)+^P']'^R' Joined...');
- End;
- End;
- Urec.LastConf:=CurrentConference;
- End;
-
- procedure TopTen(eatshit:byte);
-
- type HighestPCR=record
- Name:mstr;
- PCR:longint;
- end;
-
- Type Tp=Array[1..10] of HighestPCR;
- Var done:boolean;
- TMPrec:userrec;
- Uploaders,LameUploaders,Downloaders,LameDownloaders,Posters,GoodUls,
- BadUls,GoodDls,BadDls,LamePosters,GoodPosts,BadPosts,GoodCalls,
- BadCalls:Tp;
- TmpPost:highestpcr;
- X1:Integer;
-
- Procedure InitIt(where:byte);
- Var A,B,C,D,E,Cnt,UpToDown:LongInt;
-
- Procedure SortIt(Var ArofIt:Tp; Tempo:LongInt; UpOrDown:Boolean);
- Var Cnt,I,quick:Integer;
- Begin
- If where=0 then quick:=10 Else Quick:=5;
- Done:=False;
- For Cnt:=1 to quick Do
- Begin
- If UpOrDown then
- Begin
- If not Done and (Tempo>ArofIt[Cnt].Pcr) then
- Begin
- If Cnt<quick then
- For I:=quick-1 downto Cnt do ArofIt[I+1]:=ArofIt[I];
- ArofIt[Cnt].Name:=TmpRec.Handle;
- ArofIt[Cnt].PCR:=Tempo;
- Done:=True;
- End;
- End
- Else
- If Not Done and (Tempo<ArofIt[Cnt].PCR) then
- Begin
- If Cnt>1 then
- For I:=quick-1 downto cnt do ArofIt[I+1]:=ArofIt[I];
- ArofIt[Cnt].Name:=TmpRec.Handle;
- ArofIt[Cnt].PCR:=Tempo;
- Done:=True;
- End;
- End;
- End;
-
- begin
- ClearScr;
- If eatshit=0 then Writehdr ('Calculating Statistics');
- If eatshit=1 then writehdr ('Highest/Lowest Posts');
- If eatshit=2 then writehdr ('Highest Uploads/Downloads');
- for cnt:=1 to 10 do begin
- Posters[cnt].pcr:=0;
- posters[cnt].name:='';
- lamePosters[cnt].pcr:=maxint;
- lameposters[cnt].name:='';
- GoodPosts[Cnt].Name:='';
- GoodPosts[Cnt].PCR:=0;
- BadPosts[Cnt].Name:='';
- BadPosts[Cnt].Pcr:=MaxInt;
- GoodCalls[Cnt].Name:='';
- GoodCalls[Cnt].Pcr:=0;
- BadCalls[Cnt].Name:='';
- BadCalls[Cnt].Pcr:=MaxInt;
- Downloaders[cnt].pcr:=0;
- downloaders[cnt].name:='';
- lamedownloaders[cnt].pcr:=maxint;
- lamedownloaders[cnt].name:='';
- uploaders[cnt].pcr:=0;
- uploaders[cnt].name:='';
- lameuploaders[cnt].pcr:=maxint;
- lameuploaders[cnt].name:='';
- GoodUls[Cnt].Name:='';
- GoodUls[Cnt].PCR:=0;
- BadUls[Cnt].Name:='';
- BadUls[Cnt].PCR:=MaxInt;
- GoodDls[Cnt].Name:='';
- GoodDls[Cnt].PCR:=0;
- BadDls[Cnt].Name:='';
- BadDls[Cnt].PCR:=MaxInt;
- end;
- for cnt:=3 to numusers do begin
- seek(ufile,cnt-1);
- read(ufile,TmpRec);
- If where=0 then Begin
- if tmprec.numon>1 then
- begin
- D:=Ratio(TmpRec.Nbu,TmpRec.NumOn);
- Sortit(Posters,D,True);
- SortIt(LamePosters,D,False);
- d:=tmprec.UpKay;
- SortIt(Uploaders,D,True);
- SortIt(LameUploaders,D,False);
- d:=tmprec.DnKay;
- SortIt(Downloaders,D,True);
- SortIt(LameDownloaders,D,False);
- D:=TmpRec.Uploads;
- SortIt(GoodUls,D,True);
- SortIt(BadUls,D,False);
- D:=TmpRec.Downloads;
- SortIt(GoodDls,D,True);
- SortIt(BadDls,D,False);
- SortIt(GoodPosts,TmpRec.Nbu,True);
- SortIt(BadPosts,TmpRec.Nbu,False);
- End;
- SortIt(GoodCalls,TmpRec.NumOn,True);
- SortIt(BadCalls,TmpRec.NumOn,False);
- End Else
- If Where=1 then Begin
- if tmprec.numon>1 then Begin
- D:=Ratio(TmpRec.Nbu,TmpRec.NumOn);
- SortIt(GoodPosts,TmpRec.Nbu,True);
- SortIt(BadPosts,TmpRec.Nbu,False);
- End;
- End Else
- If Where=2 then Begin
- if tmprec.numon>1 then Begin
- d:=tmprec.UpKay;
- SortIt(Uploaders,D,True);
- d:=tmprec.DnKay;
- SortIt(Downloaders,D,True);
- End;
- End;
- End;
- End;
-
- Procedure ShowSomething(TempOr:Tp; ToSay:Mstr; SayK:Byte);
- Var Cnt:Integer;
- Begin
- ClearScr;
- WriteHdr(ToSay);
- For Cnt:=1 to 10 Do
- Begin
- Tab(Strr(Cnt)+'.',4);
- Tab(TempOr[Cnt].Name,37);
- Write(TempOr[Cnt].PCR);
- if SayK=1 then Write('%');
- If SayK=2 then Write('K');
- WriteLn;
- End;
- WriteStr(^M^R'Press [Return]:');
- End;
-
- Procedure ViZWaY(TempOr:Tp; Tosay:Mstr; SayK:Byte; Whatit:Mstr); (* The Only Way *)
- Var number:Integer;
- Begin
- WriteLn(^S+ToSay+^M);
- For Number:=1 To 5 Do Begin
- Tabul(^P+Strr(number)+^S'. ',4);
- Tabul(^F+TempOr[number].Name,37);
- Write(^A);
- Write(TempOr[number].PCR);
- If sayK=1 then Write('%');
- If sayk=2 then Write('K');
- WriteLn(' '+whatit);
- End;
- WriteLn;
- End;
-
- Begin
- If eatshit=0 then Begin
- InitIt(0);
- Repeat
- ClearScr;
- WriteHdr('Top 10 Listing');
- WriteLn(^R'[1] '^P'Best Uploaders');
- WriteLn(^R'[2] '^P'Worst Uploaders');
- WriteLn(^R'[3] '^P'Best Downloaders');
- WriteLn(^R'[4] '^P'Worst Downloaders');
- WriteLn(^R'[5] '^P'Best Post/Call Ratios');
- WriteLn(^R'[6] '^P'Worst Post/Call Ratios');
- WriteLn(^R'[7] '^P'Best Uploaders in K-Bytes');
- WriteLn(^R'[8] '^P'Worst Uploaders in K-Bytes');
- WriteLn(^R'[9] '^P'Best Downloaders in K-Bytes');
- WriteLn(^R'[10] '^P'Worst Downloaders in K-Bytes');
- WriteLn(^R'[11] '^P'Best Message Posters');
- WriteLn(^R'[12] '^P'Worst Message Posters');
- WriteLn(^R'[13] '^P'Best Callers');
- WriteLn(^R'[14] '^P'Worst Callers');
- WriteLn(^R'[15] '^P'Show all Statistics');
- WriteStr(^M^P'Selection:');
- If Input='' then Input:='0';
- X1:=Valu(Input);
- Case X1 of
- 1:ShowSomething(GoodUls,'Top 10 Uploaders',0);
- 2:ShowSomething(BadUls,'Lowest 10 Uploaders',0);
- 3:ShowSomething(GoodDls,'Top 10 Downloaders',0);
- 4:ShowSomething(BadDls,'Lowest 10 Downloaders',0);
- 5:ShowSomething(Posters,'Top 10 Post/Call Ratios',1);
- 6:ShowSomething(LamePosters,'Lowest 10 Post/Call Ratios',1);
- 7:ShowSomething(Uploaders,'Top 10 Uploaders in K-Bytes',2);
- 8:ShowSomething(LameUploaders,'Lowest 10 Uploaders in K-Bytes',2);
- 9:ShowSomething(Downloaders,'Top 10 Downloaders in K-Bytes',2);
- 10:ShowSomething(LameDownloaders,'Lowest 10 Downloaders in K-Bytes',2);
- 11:ShowSomething(GoodPosts,'Top 10 Message Posters',0);
- 12:ShowSomething(BadPosts,'Lowest 10 Message Posters',0);
- 13:ShowSomething(GoodCalls,'Top 10 Callers',0);
- 14:ShowSomething(BadCalls,'Lowest 10 Callers',0);
- 15:Begin
- ShowSomething(GoodUls,'Top 10 Uploaders',0);
- ShowSomething(BadUls,'Lowest 10 Uploaders',0);
- ShowSomething(GoodDls,'Top 10 Downloaders',0);
- ShowSomething(BadDls,'Lowest 10 Downloaders',0);
- ShowSomething(Posters,'Top 10 Post/Call Ratios',1);
- ShowSomething(LamePosters,'Lowest 10 Post/Call Ratios',1);
- ShowSomething(Uploaders,'Top 10 Uploaders in K-Bytes',2);
- ShowSomething(LameUploaders,'Lowest 10 Uploaders in K-Bytes',2);
- ShowSomething(Downloaders,'Top 10 Downloaders in K-Bytes',2);
- ShowSomething(LameDownloaders,'Lowest 10 Downloaders in K-Bytes',2);
- ShowSomething(GoodPosts,'Top 10 Message Posters',0);
- ShowSomething(BadPosts,'Lowest 10 Message Posters',0);
- ShowSomething(GoodCalls,'Top 10 Callers',0);
- ShowSomething(BadCalls,'Lowest 10 Callers',0);
- End;
- End;
- Until HungUpOn or (X1=0);
- End;
- If eatshit=1 then begin
- Initit(1);
- VizWay(GoodPosts,'Top 5 Message Posters',0,'Posts');
- Vizway(BadPosts,'Lowest 5 Message Posters',0,'Posts');
- WriteStr(^M^R'Press '^S'['^P'Enter'^S']:*');
- End;
- If eatshit=2 then Begin
- Initit(2);
- VizWay(Uploaders,'5 Best Uploaders',2,'Uploaded');
- Vizway(Downloaders,'5 Biggest Leeches',2,'Downloaded');
- WriteStr(^M^R'Press '^S'['^P'Enter'^S']:*');
- end;
- end;
-
- Procedure DisplayNodeInfo;
- Var T:Text;
- I:Integer;
- Done:Boolean;
- Ls:Lstr;
- Begin
- if not configset.multinodebbs then exit;
- I:=0;
- ClearScr;
- WriteHdr('Who''s Online Right Now');
- Repeat
- Inc(I);
- Done:=Not Exist(ConfigSet.ForumDi+'NDST'+STRR(I));
- If Not Done then
- Begin
- Assign(T,ConfigSet.ForumDi+'NDST'+STrr(I));
- ReSet(T);
- ReadLn(T,Ls);
- TextClose(T);
- WriteLn(^S'[',I,'] '^R,Ls);
- End;
- Until Done;
- End;
-
- procedure get_infoform;
- var empty:boolean;
-
- procedure listavailable;
- var cnt,num:integer;
- f:file;
- begin
- num:=0;
- for cnt:=1 to 5 do
- if (length(configset.inf[cnt]) > 0) and (not match(configset.inf[cnt],'UNUSED')) then begin
- If exist(configset.textfiledi+'INFOFORM.'+strr(cnt)) then Begin
- num:=num + 1;
- if num = 1 then writehdr ('Available Infoforms');
- tab (^R'['^U+strr(cnt)+^R'] '^P+configset.inf[cnt],34);
- case cnt of
- 1:if (configset.iman[cnt]) and (urec.infoform < 0) then
- write (^S'Required');
- 2:if (configset.iman[cnt]) and (urec.infoform2 < 0) then
- write (^S'Required');
- 3:if (configset.iman[cnt]) and (urec.infoform3 < 0) then
- write (^S'Required');
- 4:if (configset.iman[cnt]) and (urec.infoform4 < 0) then
- write (^S'Required');
- 5:if (configset.iman[cnt]) and (urec.infoform5 < 0) then
- write (^S'Required');
- end;
- writeln;
- end;
- end;
- end;
-
- function anyneeded:boolean;
- var cnt,locate,num:integer;
- f:file;
- begin
- empty:=false;
- anyneeded:=true;
- num:=0;
- close (f);
- for cnt:=1 to 5 do
- if (length(configset.inf[cnt]) > 0) then begin
- if exist(configset.textfiledi+'INFOFORM.'+strr(cnt)) then begin
- num:=9;
- if (configset.iman[cnt]) then begin
- case cnt of
- 1:locate:=urec.infoform;
- 2:locate:=urec.infoform2;
- 3:locate:=urec.infoform3;
- 4:locate:=urec.infoform4;
- 5:locate:=urec.infoform5;
- end;
- if locate < 0 then exit;
- end;
- end;
- end;
- empty:=num < 1;
- anyneeded:=false;
- end;
-
- var boo:boolean;
- s:string;
- begin
- if configset.totform < 1 then exit;
- if ansigraphics in urec.config then
- write (#27'[J') else
- write (^L);
- boo:=anyneeded;
- repeat
- if empty then begin
- writeln ('Sorry, No Infoforms Available');
- exit;
- end;
- listavailable;
- if not boo then
- writestr (^M'Select Infoform to Fill Out [1..5][CR/Quit]:') else
- writestr (^M'Select Infoform to Fill Out [1..5]:');
- s:=input;
- if (valu(s) > 0) and (valu(s) < 6) then begin
- infoform (valu(s));
- boo:=anyneeded;
- end;
- until (valu(s)<1) and (boo = false);
- end;
-
- Procedure Usercheck;
- Begin
- if not (urec.use1) and not (urec.use2) and not (urec.use3) and not (urec.use4) and
- not (urec.use5) and not (urec.use6) and not (urec.use7) and not (urec.use8) then
- UserFileListing;
- topten(2);
- End;
-
- begin
- end.
-
-